a,b= map(int, input().split())
x=int((1e9)+7)
z=(b*(b-1))//2
z=z*a
z=z*(2+ (b*(a+1)))
z=z//2
print(z%x)
#include<bits/stdc++.h>
using namespace std;
#define int long long
int mod=1e9+7;
signed main(){
int a,b;
cin>>a>>b;
int sum1=(((b*(b-1)/2)%mod)*((a*(a+1)/2)%mod))%mod*b;
int sum2=((b*(b-1)/2)%mod)*a;
cout<<(sum1%mod+sum2%mod)%mod<<endl;
}
406. Queue Reconstruction by Height | 380. Insert Delete GetRandom O(1) |
332. Reconstruct Itinerary | 368. Largest Divisible Subset |
377. Combination Sum IV | 322. Coin Change |
307. Range Sum Query - Mutable | 287. Find the Duplicate Number |
279. Perfect Squares | 275. H-Index II |
274. H-Index | 260. Single Number III |
240. Search a 2D Matrix II | 238. Product of Array Except Self |
229. Majority Element II | 222. Count Complete Tree Nodes |
215. Kth Largest Element in an Array | 198. House Robber |
153. Find Minimum in Rotated Sorted Array | 150. Evaluate Reverse Polish Notation |
144. Binary Tree Preorder Traversal | 137. Single Number II |
130. Surrounded Regions | 129. Sum Root to Leaf Numbers |
120. Triangle | 102. Binary Tree Level Order Traversal |
96. Unique Binary Search Trees | 75. Sort Colors |
74. Search a 2D Matrix | 71. Simplify Path |